|
자주 쓰이는 메소드및 API 를 정리합니다. |
[1] |
|
등록일:2008-03-09 14:28:23 (0%) 작성자: 제목:URL 관련 클래스 |
|
URL 클래스는 URL 주소가 알맞은 형식의 URL 주소인지 검사하거나, URL 주소로부터 사용되는 프로토콜, 서버명, 포트, 파일명 등을 구할 때 사용이 되어집니다. 또한, URL 주소로 지정된 파일을 읽어 들일 때도 사용됩니다.
URLInfo.java
import java.net.*;
public class URLInfo {
public static void main(String[] args) {
if(args.length != 1) {
System.out.println("사용법 : java URLInfo URL");
System.exit(1);
}
URL url = null;
try {
url = new URL(args[0]);
} catch (MalformedURLException e1) {
System.out.println("잘못된 URL 형식입니다.");
System.out.println(e1);
System.exit(1);
}
System.out.println("프로토콜 : " + url.getProtocol());
System.out.println("호스트 이름 : " + url.getHost());
System.out.println("포트번호 : " + url.getPort());
System.out.println("파일이름 : " + url.getPath());
System.out.println("사용자 쿼리 : " + url.getQuery());
}
}
- URL 클래스의 생성자에 외부로부터 전달 받은 URL 주소 문자열을 지정해서 URL 객체를 생성했습니다.
- 잘못된 형식의 URL 주소를 인자로 지정했다면 java.net.MalformedURLException이 발생합니다.
URL 클래스를 이용해서 웹사이트 읽어오기
도스창에서 아래와 같이 해보세요.
C:\>telnet www.oracleclub.com 80 (엔터)
C:\>GET / (엔터)
GET /라는 글씨가 안보일 수도 있습니다.
* www.oracleclub.com의 메인 페이지(index.jsp 이거나 index.html Maybe) 의 태그가 보일 것입니다. 이는 웹서버가 동작하는 80번 포트에 telnet 프로그램으로 접속한 후 '/' 디렉토리의 내용을 GET 방식으로 보여달라고 HTTP 프로토콜에 해당하는 문자열을 보낸 것입니다. 그 결과 서버는 접속한 클라이언트가 telnet 프로그램인줄 모르고 웹브라우저로 판단해서 '/'디렉토리에 해당하는 HTML 태그를 출력한 것입니다. 실제로 '/' 디렉토리에 대한 정보를 출력한 것이 아니고 디렉토리명을 지정하면 기본적으로 열리는 'index.html'이나 'index.jsp' 파일이 호출된 것입니다.
* 소켓프로그래밍에서 간단하게 웹서버로부터 요청을 보내서 결과를 출력하려면 아래의 과정을 거칩니다.
1. 웹서버의 IP와 웹서버의 동작포트(80)에 접속하는 Socket 객체를 생성
2. 접속에 성공하면 Socket으로부터 얻은 OutputStream을 통해서 웹서버에게 'GET /' 문자열을 전송
3. 웹서버는 '/' 디렉토리 아래에 있는 기본적인 index.html 파일을 열어 클라이언트에게 결과를 출력
4. 클라이언트는 Socket으로부터 얻은 InputStream을 통해서 웹서버가 보내주는 정보를 읽어들여 출력
* URL 클래스에 있는 openStream() 메소드는 URL 클래스에게 지정된 URL 주소가 가리키는 문서를 읽을 수 있는 InputStream을 반환합니다. HTTP 프로토콜을 몰라도 손쉽게 웹사이트의 내용을 긁어올 수 있는 것입니다.
WebSpider.java
import java.net.*;
import java.io.*;
public class WebSpider {
public static void main(String[] args) {
if(args.length != 2) {
//java WebSpider http://www.daum.net daum.txt
System.out.println("사용법 : java WebSpider URL filename");
System.exit(1);
}
URL url = null;
try {
url = new URL(args[0]);
} catch (MalformedURLException e1) {
System.out.println("잘못된 URL 형식입니다.");
System.out.println(e1);
System.exit(1);
}
FileOutputStream fos = null;
try {
InputStream in = url.openStream();
fos = new FileOutputStream(args[1]);
byte[] buffer = new byte[512];
int readcount = 0;
System.out.println("읽어오기 시작합니다.");
while((readcount = in.read(buffer)) != -1) {
fos.write(buffer, 0, readcount);
}
System.out.println(args[1] + " 파일에 모두 저장하였습니다.");
} catch(Exception ex) {
System.out.println(ex);
} finally {
try {
if(fos != null) fos.close();
} catch(Exception e) {}
}
}
}
- URL 클래스에 있는 openStream()을 이용해서 InputStream을 얻습니다. 해당 InputStream은 URL 주소가 가리키는 내용을 스트림 형식으로 읽어 들일 수 있는 객체이며 InputStream을 통해서 읽어 들인 내용을 저장하기 위해서 FileOutputStream을 사용했습니다.
- openStream()을 이용해서 읽어 들일 때에는 웹페이지를 GET 방식으로만 호출할 수 있습니다. 만약, POST 방식으로 호출하려면 URLConnection을 이용하면 됩니다.
출처 : http://cafe.naver.com/itline.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=10442 [2008년 03월 09일 14:29:37 수정되었습니다.] |
[본문링크] URL 관련 클래스
|
[1]
|
|
|
|
|
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=2418 |
|
|
|
|
|
|
|
|
|
Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.
|
|
|